package tk.paulista.dc.control;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.roo.addon.web.mvc.controller.scaffold.RooWebScaffold;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import tk.paulista.dc.model.AtividadeFisica;

@RequestMapping("/atividadefisicas")
@Controller
@RooWebScaffold(path = "atividadefisicas", formBackingObject = AtividadeFisica.class)
public class AtividadeFisicaController extends ApplicationAbstractController {

	@RequestMapping(method = RequestMethod.POST, produces = "text/html")
	public String create(@Valid AtividadeFisica atividadeFisica,
			BindingResult bindingResult, Model uiModel,
			HttpServletRequest httpServletRequest) {
		if (bindingResult.hasErrors()) {
			populateEditForm(uiModel, atividadeFisica);
			return "atividadefisicas/create";
		}
		uiModel.asMap().clear();
		setUsuario(atividadeFisica);
		atividadeFisica.persist();
		setDate(atividadeFisica);
		atividadeFisica.persist();
		setQuantidadeDeCalorias(atividadeFisica);
		atividadeFisica.persist();
		setQuantidadeDeCaloriasDoDia(atividadeFisica);
		atividadeFisica.persist();
		return "redirect:/atividadefisicas/"
				+ encodeUrlPathSegment(atividadeFisica.getId().toString(),
						httpServletRequest);
	}

	private void setDate(AtividadeFisica atividadeFisica) {
		if (atividadeFisica.getDiaDoDiario() == null) {
			atividadeFisica.setDiaDoDiario(getDateWithoutTime());
		}
	}

	private void setQuantidadeDeCaloriasDoDia(AtividadeFisica atividadeFisica) {
		try {
			atividadeFisica
					.setQuantidadeDeCaloriasDeAtividadeFisicaDoDia(AtividadeFisica
							.getQuantidadeDeCaloriasDoDiaDoDiarioCalorico(
									atividadeFisica.getDiaDoDiario(),
									getUsuarioLogado()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void setQuantidadeDeCalorias(AtividadeFisica atividadeFisica) {
		try {
			atividadeFisica.setQuantidadeDeCalorias(atividadeFisica
					.getTipoDeAtividadeFisica()
					.getQuantidadeDeCaloriasPorMinutoDaAtividadeFisica()
					* atividadeFisica.getQuantidadeDeMinutos());
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private void setUsuario(AtividadeFisica atividadeFisica) {
		atividadeFisica.setUsuarioDaAtividadeFisica(getUsuarioLogado());
	}

	@RequestMapping(method = RequestMethod.PUT, produces = "text/html")
	public String update(@Valid AtividadeFisica atividadeFisica,
			BindingResult bindingResult, Model uiModel,
			HttpServletRequest httpServletRequest) {
		if (bindingResult.hasErrors()) {
			populateEditForm(uiModel, atividadeFisica);
			return "atividadefisicas/update";
		}
		uiModel.asMap().clear();
		setDate(atividadeFisica);
		atividadeFisica.merge();
		setQuantidadeDeCalorias(atividadeFisica);
		atividadeFisica.merge();
		setQuantidadeDeCaloriasDoDia(atividadeFisica);
		atividadeFisica.merge();
		return "redirect:/atividadefisicas/"
				+ encodeUrlPathSegment(atividadeFisica.getId().toString(),
						httpServletRequest);
	}
}
